package ru.spb.nicetu.altx.mnemo.node;

import ru.spb.nicetu.altx.mnemo.cell.INodeCell;

public interface ICompoundTaskNode extends INode {
  /**
   * Добавление в группу входных ячеек Виртуальной Ячейки, сопоставленной с
   * ячейкой другого NODE-а (link)
   * 
   * @param link
   *          - ссылка на ячейку другого NODE-а, сопоставленной Виртуальной
   *          Ячейке
   * @return - созданная Виртуальная Ячейка
   */
  INodeCell addVirtualInputCell(ICellLink link);

  /**
   * Удаление из группы входных ячеек Виртуальной Ячейки, сопоставленной с
   * ячейкой другого NODE-а (link)
   * 
   * @param link
   *          - ссылка на ячейку другого NODE-а, сопоставленной удаляемой
   *          Виртуальной Ячейке
   */
  void removeVirtualInputCell(ICellLink link);

  /**
   * Добавление в группу выходных ячеек Виртуальной Ячейки, сопоставленной с
   * ячейкой другого NODE-а (link)
   * 
   * @param link
   *          - ссылка на ячейку другого NODE-а, сопоставленной Виртуальной
   *          Ячейке.
   * @return - созданная Виртуальная Ячейка.
   */
  INodeCell addVirtualOutputCell(ICellLink link);

  /**
   * Удаление из группы входных ячеек Виртуальной Ячейки, сопоставленной с
   * ячейкой другого NODE-а (link)
   * 
   * @param link
   *          - ссылка на ячейку другого NODE-а, сопоставленной удаляемой
   *          Виртуальной Ячейке.
   */
  void removeVirtualOutputCell(ICellLink link);

  /**
   * @param cell
   *          - Виртуальная Ячейка
   * @return - ссылка на ячейку другого NODE-а, сопоставленной Виртуальной
   *         Ячейке cell.
   */
  ICellLink getLinkToOriginalInputCell(INodeCell cell);

  /**
   * @param cell
   *          - Виртуальная Ячейка
   * @return - ссылка на ячейку другого NODE-а, сопоставленной Виртуальной
   *         Ячейке cell.
   */
  ICellLink getLinkToOriginalOutputCell(INodeCell cell);

  /**
   * @param originalCellLink
   *          - ссылка на оригинальную ячейку.
   * @return ссылка на Виртуальную ячейку NODE-а, соответствующую оригинальной
   *         ячейке originalCellLink, или null.
   */
  ICellLink getVirtualCellLink(ICellLink originalCellLink);
}
